Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / app / src / google / java / com / geeksville / mesh / android / GeeksvilleApplication.kt

Displaying Raw • Download

app/src/google/java/com/geeksville/mesh/android/GeeksvilleApplication.kt ui_message_list (be3f882f) Text, 10.48 KB

T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

Tff7b72package T7ee787com.geeksville.mesh.android

Tff7b72import T7ee787android.app.Application
Tff7b72import T7ee787android.content.Context
Tff7b72import T7ee787android.content.SharedPreferences
Tff7b72import T7ee787android.provider.Settings
Tff7b72import T7ee787androidx.appcompat.app.AppCompatActivity
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.navigation.NavHostController
Tff7b72import T7ee787com.datadog.android.Datadog
Tff7b72import T7ee787com.datadog.android.DatadogSite
Tff7b72import T7ee787com.datadog.android.compose.ExperimentalTrackingApi
Tff7b72import T7ee787com.datadog.android.compose.NavigationViewTrackingEffect
Tff7b72import T7ee787com.datadog.android.compose.enableComposeActionTracking
Tff7b72import T7ee787com.datadog.android.core.configuration.Configuration
Tff7b72import T7ee787com.datadog.android.log.Logger
Tff7b72import T7ee787com.datadog.android.log.Logs
Tff7b72import T7ee787com.datadog.android.log.LogsConfiguration
Tff7b72import T7ee787com.datadog.android.privacy.TrackingConsent
Tff7b72import T7ee787com.datadog.android.rum.GlobalRumMonitor
Tff7b72import T7ee787com.datadog.android.rum.Rum
Tff7b72import T7ee787com.datadog.android.rum.RumConfiguration
Tff7b72import T7ee787com.datadog.android.rum.tracking.AcceptAllNavDestinations
Tff7b72import T7ee787com.datadog.android.sessionreplay.SessionReplay
Tff7b72import T7ee787com.datadog.android.sessionreplay.SessionReplayConfiguration
Tff7b72import T7ee787com.datadog.android.sessionreplay.compose.ComposeExtensionSupport
Tff7b72import T7ee787com.datadog.android.timber.DatadogTree
Tff7b72import T7ee787com.datadog.android.trace.Trace
Tff7b72import T7ee787com.datadog.android.trace.TraceConfiguration
Tff7b72import T7ee787com.datadog.android.trace.opentelemetry.DatadogOpenTelemetry
Tff7b72import T7ee787com.geeksville.mesh.BuildConfig
Tff7b72import T7ee787com.geeksville.mesh.analytics.AnalyticsProvider
Tff7b72import T7ee787com.geeksville.mesh.analytics.FirebaseAnalytics
Tff7b72import T7ee787com.geeksville.mesh.android.prefs.AnalyticsPrefs
Tff7b72import T7ee787com.geeksville.mesh.model.DeviceHardware
Tff7b72import T7ee787com.geeksville.mesh.util.exceptionReporter
Tff7b72import T7ee787com.google.android.gms.common.ConnectionResult
Tff7b72import T7ee787com.google.android.gms.common.GoogleApiAvailabilityLight
Tff7b72import T7ee787com.google.firebase.Firebase
Tff7b72import T7ee787com.google.firebase.analytics.analytics
Tff7b72import T7ee787com.google.firebase.crashlytics.crashlytics
Tff7b72import T7ee787com.google.firebase.crashlytics.setCustomKeys
Tff7b72import T7ee787com.google.firebase.initialize
Tff7b72import T7ee787com.suddenh4x.ratingdialog.AppRating
Tff7b72import T7ee787io.opentelemetry.api.GlobalOpenTelemetry
Tff7b72import T7ee787timber.log.Timber

Tff7b72abstract Tff7b72class T56d364GeeksvilleApplication Tb4b4b4:
Te6edf3ApplicationTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3Logging Tb4b4b4{

Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72lateinit Tff7b72var Te6edf3analyticsTb4b4b4: Te6edf3AnalyticsProvider
Tb4b4b4}

T8b949e// / Are we running inside the testlab?
Tff7b72val Te6edf3isInTestLabTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3testLabSetting Tff7b72= Te6edf3SettingsTb4b4b4.Te6edf3SystemTb4b4b4.Te6edf3getStringTb4b4b4(Te6edf3contentResolverTb4b4b4, Ta5d6ff"Ta5d6fffirebase.test.labTa5d6ff"Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3testLabSetting Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffTestlab is Tffd700$Te6edf3testLabSettingTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72return Ta5d6ff"Ta5d6fftrueTa5d6ff" Tff7b72=Tff7b72= Te6edf3testLabSetting
Tb4b4b4}

Tff7b72abstract Tff7b72val Te6edf3analyticsPrefsTb4b4b4: Te6edf3AnalyticsPrefs

Tff7b72private Tff7b72val Te6edf3minimumLaunchTimesTb4b4b4: Tffa657Int Tff7b72= T79c0ff1T79c0ff0
Tff7b72private Tff7b72val Te6edf3minimumDaysTb4b4b4: Tffa657Int Tff7b72= T79c0ff1T79c0ff0
Tff7b72private Tff7b72val Te6edf3minimumLaunchTimesToShowAgainTb4b4b4: Tffa657Int Tff7b72= T79c0ff5
Tff7b72private Tff7b72val Te6edf3minimumDaysToShowAgainTb4b4b4: Tffa657Int Tff7b72= T79c0ff1T79c0ff4

T8b949e/** Ask user to rate in play store */
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffaskToRateTb4b4b4(Te6edf3activityTb4b4b4: Te6edf3AppCompatActivityTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isGooglePlayAvailableTb4b4b4) Tff7b72return

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMaxLineLengthTa5d6ff"Tb4b4b4)
Te6edf3exceptionReporter Tb4b4b4{
T8b949e// we don't want to crash our app because of bugs in this optional feature
Te6edf3AppRatingTb4b4b4.Te6edf3BuilderTb4b4b4(Te6edf3activityTb4b4b4)
Tb4b4b4.Te6edf3setMinimumLaunchTimesTb4b4b4(Te6edf3minimumLaunchTimesTb4b4b4) T8b949e// default is 5, 3 means app is launched 3 or more times
Tb4b4b4.Te6edf3setMinimumDaysTb4b4b4(
Te6edf3minimumDaysTb4b4b4,
Tb4b4b4) T8b949e// default is 5, 0 means install day, 10 means app is launched 10 or more days
T8b949e// later than installation
Tb4b4b4.Te6edf3setMinimumLaunchTimesToShowAgainTb4b4b4(
Te6edf3minimumLaunchTimesToShowAgainTb4b4b4,
Tb4b4b4) T8b949e// default is 5, 1 means app is launched 1 or more times after neutral button
T8b949e// clicked
Tb4b4b4.Te6edf3setMinimumDaysToShowAgainTb4b4b4(
Te6edf3minimumDaysToShowAgainTb4b4b4,
Tb4b4b4) T8b949e// default is 14, 1 means app is launched 1 or more days after neutral button
T8b949e// clicked
Tb4b4b4.Te6edf3showIfMeetsConditionsTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72lateinit Tff7b72var Te6edf3analyticsPrefsChangedListenerTb4b4b4: Te6edf3SharedPreferencesTb4b4b4.Te6edf3OnSharedPreferenceChangeListener

Tff7b72override Tff7b72fun Td2a8ffonCreateTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onCreateTb4b4b4(Tb4b4b4)
Te6edf3initDatadogTb4b4b4(Tb4b4b4)
Te6edf3initCrashlyticsTb4b4b4(Tb4b4b4)
Te6edf3updateAnalyticsConsentTb4b4b4(Tb4b4b4)
T8b949e// listen for changes to analytics prefs
Te6edf3analyticsPrefsChangedListener Tff7b72=
Te6edf3SharedPreferencesTb4b4b4.Te6edf3OnSharedPreferenceChangeListener Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3key Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3key Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffallowedTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3updateAnalyticsConsentTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3getSharedPreferencesTb4b4b4(Ta5d6ff"Ta5d6ffanalytics-prefsTa5d6ff"Tb4b4b4, Te6edf3MODE_PRIVATETb4b4b4)
Tb4b4b4.Te6edf3registerOnSharedPreferenceChangeListenerTb4b4b4(Te6edf3analyticsPrefsChangedListenerTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3sampleRate Tff7b72= T79c0ff1T79c0ff0T79c0ff0f

Tff7b72private Tff7b72fun Td2a8ffinitCrashlyticsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3analytics Tff7b72= Te6edf3FirebaseAnalyticsTb4b4b4(Te6edf3analyticsPrefsTb4b4b4.Te6edf3installIdTb4b4b4)
Te6edf3FirebaseTb4b4b4.Te6edf3initializeTb4b4b4(Tff7b72thisTb4b4b4)
Te6edf3FirebaseTb4b4b4.Te6edf3crashlyticsTb4b4b4.Te6edf3setUserIdTb4b4b4(Te6edf3analyticsPrefsTb4b4b4.Te6edf3installIdTb4b4b4)
Te6edf3TimberTb4b4b4.Te6edf3plantTb4b4b4(Te6edf3CrashlyticsTreeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffupdateAnalyticsConsentTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isAnalyticsAvailable Tff7b72|Tff7b72| Te6edf3isInTestLabTb4b4b4) Tb4b4b4{
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffAnalytics not availableTa5d6ff"Tb4b4b4)
Tff7b72return
Tb4b4b4}
Tff7b72val Te6edf3isAnalyticsAllowed Tff7b72= Te6edf3analyticsPrefsTb4b4b4.Te6edf3analyticsAllowed
Te6edf3infoTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3isAnalyticsAllowedTb4b4b4) Ta5d6ff"Ta5d6ffAnalytics enabledTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ffAnalytics disabledTa5d6ff"Tb4b4b4)
Te6edf3DatadogTb4b4b4.Te6edf3setTrackingConsentTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3isAnalyticsAllowedTb4b4b4) Te6edf3TrackingConsentTb4b4b4.Te6edf3GRANTED Tff7b72else Te6edf3TrackingConsentTb4b4b4.Te6edf3NOT_GRANTEDTb4b4b4)

Te6edf3analyticsTb4b4b4.Te6edf3setEnabledTb4b4b4(Te6edf3isAnalyticsAllowedTb4b4b4)
Te6edf3FirebaseTb4b4b4.Te6edf3crashlyticsTb4b4b4.Te6edf3isCrashlyticsCollectionEnabled Tff7b72= Te6edf3isAnalyticsAllowed
Te6edf3FirebaseTb4b4b4.Te6edf3analyticsTb4b4b4.Te6edf3setAnalyticsCollectionEnabledTb4b4b4(Te6edf3isAnalyticsAllowedTb4b4b4)
Te6edf3FirebaseTb4b4b4.Te6edf3crashlyticsTb4b4b4.Te6edf3sendUnsentReportsTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72class T56d364CrashlyticsTree Tb4b4b4: Te6edf3TimberTb4b4b4.Te6edf3TreeTb4b4b4(Tb4b4b4) Tb4b4b4{

Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3KEY_PRIORITY Tff7b72= Ta5d6ff"Ta5d6ffpriorityTa5d6ff"
Tff7b72private Tff7b72const Tff7b72val Te6edf3KEY_TAG Tff7b72= Ta5d6ff"Ta5d6fftagTa5d6ff"
Tff7b72private Tff7b72const Tff7b72val Te6edf3KEY_MESSAGE Tff7b72= Ta5d6ff"Ta5d6ffmessageTa5d6ff"
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8fflogTb4b4b4(Te6edf3priorityTb4b4b4: Tffa657IntTb4b4b4, Te6edf3tagTb4b4b4: Tffa657String?Tb4b4b4, Te6edf3messageTb4b4b4: Tffa657StringTb4b4b4, Te6edf3tTb4b4b4: Te6edf3Throwable?Tb4b4b4) Tb4b4b4{
Te6edf3FirebaseTb4b4b4.Te6edf3crashlyticsTb4b4b4.Te6edf3setCustomKeys Tb4b4b4{
Te6edf3keyTb4b4b4(Te6edf3KEY_PRIORITYTb4b4b4, Te6edf3priorityTb4b4b4)
Te6edf3keyTb4b4b4(Te6edf3KEY_TAGTb4b4b4, Te6edf3tag Tff7b72?: Ta5d6ff"Ta5d6ffNo TagTa5d6ff"Tb4b4b4)
Te6edf3keyTb4b4b4(Te6edf3KEY_MESSAGETb4b4b4, Te6edf3messageTb4b4b4)
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3t Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3FirebaseTb4b4b4.Te6edf3crashlyticsTb4b4b4.Te6edf3recordExceptionTb4b4b4(Te6edf3ExceptionTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3FirebaseTb4b4b4.Te6edf3crashlyticsTb4b4b4.Te6edf3recordExceptionTb4b4b4(Te6edf3tTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffinitDatadogTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3logger Tff7b72=
Te6edf3LoggerTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setNetworkInfoEnabledTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3setRemoteSampleRateTb4b4b4(Te6edf3sampleRateTb4b4b4)
Tb4b4b4.Te6edf3setBundleWithTraceEnabledTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3setBundleWithRumEnabledTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3configuration Tff7b72=
Te6edf3ConfigurationTb4b4b4.Te6edf3BuilderTb4b4b4(
Te6edf3clientToken Tff7b72= Te6edf3BuildConfigTb4b4b4.Te6edf3datadogClientTokenTb4b4b4,
Te6edf3env Tff7b72= Tff7b72if Tb4b4b4(Te6edf3BuildConfigTb4b4b4.Te6edf3DEBUGTb4b4b4) Ta5d6ff"Ta5d6ffdebugTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ffreleaseTa5d6ff"Tb4b4b4,
Te6edf3variant Tff7b72= Te6edf3BuildConfigTb4b4b4.Te6edf3FLAVORTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3useSiteTb4b4b4(Te6edf3DatadogSiteTb4b4b4.Te6edf3US5Tb4b4b4)
Tb4b4b4.Te6edf3setCrashReportsEnabledTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3setUseDeveloperModeWhenDebuggableTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3consent Tff7b72= Te6edf3TrackingConsentTb4b4b4.Te6edf3PENDING
Te6edf3DatadogTb4b4b4.Te6edf3initializeTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3configurationTb4b4b4, Te6edf3consentTb4b4b4)
Te6edf3DatadogTb4b4b4.Te6edf3setUserInfoTb4b4b4(Te6edf3analyticsPrefsTb4b4b4.Te6edf3installIdTb4b4b4)

Tff7b72val Te6edf3rumConfiguration Tff7b72=
Te6edf3RumConfigurationTb4b4b4.Te6edf3BuilderTb4b4b4(Te6edf3BuildConfigTb4b4b4.Te6edf3datadogApplicationIdTb4b4b4)
Tb4b4b4.Te6edf3trackAnonymousUserTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3trackBackgroundEventsTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3trackFrustrationsTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3trackLongTasksTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3trackNonFatalAnrsTb4b4b4(Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3trackUserInteractionsTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3enableComposeActionTrackingTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3RumTb4b4b4.Te6edf3enableTb4b4b4(Te6edf3rumConfigurationTb4b4b4)

Tff7b72val Te6edf3logsConfig Tff7b72= Te6edf3LogsConfigurationTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3LogsTb4b4b4.Te6edf3enableTb4b4b4(Te6edf3logsConfigTb4b4b4)

Tff7b72val Te6edf3traceConfig Tff7b72= Te6edf3TraceConfigurationTb4b4b4.Te6edf3BuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3TraceTb4b4b4.Te6edf3enableTb4b4b4(Te6edf3traceConfigTb4b4b4)

Te6edf3GlobalOpenTelemetryTb4b4b4.Te6edf3setTb4b4b4(Te6edf3DatadogOpenTelemetryTb4b4b4(Te6edf3BuildConfigTb4b4b4.Te6edf3APPLICATION_IDTb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3sessionReplayConfig Tff7b72=
Te6edf3SessionReplayConfigurationTb4b4b4.Te6edf3BuilderTb4b4b4(Te6edf3sampleRate Tff7b72= T79c0ff2T79c0ff0.0fTb4b4b4)
T8b949e// in case you need Jetpack Compose support
Tb4b4b4.Te6edf3addExtensionSupportTb4b4b4(Te6edf3ComposeExtensionSupportTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)

Te6edf3SessionReplayTb4b4b4.Te6edf3enableTb4b4b4(Te6edf3sessionReplayConfigTb4b4b4)

Te6edf3TimberTb4b4b4.Te6edf3plantTb4b4b4(Te6edf3TimberTb4b4b4.Te6edf3DebugTreeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3DatadogTreeTb4b4b4(Te6edf3loggerTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72fun Td2a8ffsetAttributesTb4b4b4(Te6edf3firmwareVersionTb4b4b4: Tffa657StringTb4b4b4, Te6edf3deviceHardwareTb4b4b4: Te6edf3DeviceHardwareTb4b4b4) Tb4b4b4{
Te6edf3GlobalRumMonitorTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3addAttributeTb4b4b4(Ta5d6ff"Ta5d6fffirmware_versionTa5d6ff"Tb4b4b4, Te6edf3firmwareVersionTb4b4b4.Te6edf3extractSemanticVersionTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3GlobalRumMonitorTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3addAttributeTb4b4b4(Ta5d6ff"Ta5d6ffdevice_hardwareTa5d6ff"Tb4b4b4, Te6edf3deviceHardwareTb4b4b4.Te6edf3hwModelSlugTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3ContextTb4b4b4.Te6edf3isGooglePlayAvailableTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72=
Te6edf3GoogleApiAvailabilityLightTb4b4b4.Te6edf3getInstanceTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3isGooglePlayServicesAvailableTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4.Te6edf3let Tb4b4b4{
Tffa657it Tff7b72!Tff7b72= Te6edf3ConnectionResultTb4b4b4.Te6edf3SERVICE_MISSING Tff7b72&Tff7b72& Tffa657it Tff7b72!Tff7b72= Te6edf3ConnectionResultTb4b4b4.Te6edf3SERVICE_INVALID
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3isDatadogAvailableTb4b4b4: Tffa657Boolean Tff7b72= Te6edf3DatadogTb4b4b4.Te6edf3isInitializedTb4b4b4(Tb4b4b4)

Tff7b72val Te6edf3ContextTb4b4b4.Te6edf3isAnalyticsAvailableTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3isDatadogAvailable Tff7b72&Tff7b72& Te6edf3isGooglePlayAvailable

Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalTrackingApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffAddNavigationTrackingTb4b4b4(Te6edf3navControllerTb4b4b4: Te6edf3NavHostControllerTb4b4b4) Tb4b4b4{
Te6edf3NavigationViewTrackingEffectTb4b4b4(
Te6edf3navController Tff7b72= Te6edf3navControllerTb4b4b4,
Te6edf3trackArguments Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3destinationPredicate Tff7b72= Te6edf3AcceptAllNavDestinationsTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tff7b72fun Te6edf3StringTb4b4b4.Td2a8ffextractSemanticVersionTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
T8b949e// Regex to capture up to three numeric parts separated by dots
Tff7b72val Te6edf3regex Tff7b72= Ta5d6ff"""Ta5d6ff^(Ta5d6ff\Ta5d6ffd+)(?:Ta5d6ff\Ta5d6ff.(Ta5d6ff\Ta5d6ffd+))?(?:Ta5d6ff\Ta5d6ff.(Ta5d6ff\Ta5d6ffd+))?Ta5d6ff"""Tb4b4b4.Te6edf3toRegexTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3matchResult Tff7b72= Te6edf3regexTb4b4b4.Te6edf3findTb4b4b4(Tff7b72thisTb4b4b4)
Tff7b72return Te6edf3matchResultTff7b72?.Te6edf3groupValuesTff7b72?.Te6edf3dropTb4b4b4(T79c0ff1Tb4b4b4)Tff7b72?.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tff7b72?.Te6edf3joinToStringTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)
Tff7b72?: Tff7b72this T8b949e// Fallback to original if no match
Tb4b4b4}

Served by rngit 1.5.1 - Generated in 0.07s